import sun.font.FontRunIterator;

import javax.xml.bind.annotation.XmlAnyAttribute;
import java.io.CharArrayReader;
import java.time.chrono.MinguoChronology;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class ArrayHomeWork {
    public static void main(String[] args) {
        int arr1[] = {1,2,3};
        int arr2[]={4,5,6};
        System.out.println("交换前arr1:"+Arrays.toString(arr1));
        System.out.println("交换前arr2:"+Arrays.toString(arr2));
        swapArray(arr1,arr2);

//        int[] ret=transform(arr);
//        System.out.println(Arrays.toString(arr));
//       System.out.println(onceNum(arr));
//        System.out.println(onceNum(arr));
        //认识null
//        int[] arr=null;
//        System.out.println(arr[0]);
//         int[] arr=createArray();
//         int ret=binarySearch(arr,9999);
//        System.out.println("ret="+ret+"count"+count);
//        int[] nums = {2,7,11,15};
//        int[] ret=find(nums,9);
//        System.out.println(Arrays.toString(ret));
        //      System.out.println(onceNum(arr));
//       System.out.println(manyNum(arr));
//       System.out.println(threeConsecutiveOdds(arr));
//        transform(arr);
//       System.out.println(Arrays.toString(arr));
//        reverse(arr);
//        System.out.println(Arrays.toString(arr));
//        System.out.println(find(arr,8));
//        System.out.println(arrayMaxNum(arr));
//        System.out.println(toString(arr));
//        int[] ret=copyOf(arr,2,4);
//        System.out.println("ret:"+Arrays.toString(ret));
//        int[] ret=arrCopy(arr);
//        System.out.println("ret:"+ Arrays.toString(ret));
//        System.out.println( binarySearch(arr,3));
    }
    // createArray();
    //  int[] arr = {1, 2, 3, 4, 5, 6};
    //  printArray(arr);
    //  int[] arr = {9,7,8};
//        arr = bubbleSort(arr);
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + " ");
//        }
//        System.out.println(isSorted(arr));
    //   }

//        Transform(arr);
//     int[] output=Transform(arr);
//       printArray(output);
    //    System.out.println(Avg(arr));
    //       System.out.println(Sum(arr));
    // }
//求平均值
//            public  double Avg(int[] arr){
//        int ret=0;
//        for (int i = 0; i <arr.length; i++) {
//            ret+=arr[i];
//        }
//        return (double)ret/arr.length;
//    }
    //求数组和
//    public static int Sum(int[] arr){
//        int sum=0;
//        for(int x : arr){
//            sum+=x;
//        }
//        return sum;
//    }
    //打印数组
//    public static void printArray(int[] arr) {
//        for(int i = 0; i < arr.length; ++i) {
//            System.out.print(arr[i] + " ");
//        }
//        }
//
//改变数组的值
//        public static int[] Transform ( int[] arr){
//
//            int[] ret = new int[arr.length];
//            for (int i = 0; i < arr.length; i++) {
//                ret[i] = arr[i] * 2;
//            }
//            return ret;
//        }
//     public static void printArray(int[] arr) {
//        for(int i=0;i<arr.length;++i){
//        System.out.print(arr[i]+" ");
//    }
//}
    //冒泡排序
//    public static int[] bubbleSort(int[] arr) {
//        for (int i = 0; i < arr.length ; i++) {
    //优化(若内层循环没有交换,说明数组已经有序!)

//            for (int j = 0; j < arr.length - 1 - i; j++) {
//                if (arr[j] > arr[j + 1]) {
//                    int tmp = arr[j];
//                    arr[j] = arr[j + 1];
//                    arr[j+1]=tmp;
//                }
//            }
//        }
//        return arr;
//    }
    //数组是否有序
//public static boolean isSorted(int[] arr){
//    for (int i = 0; i < arr.length-1; i++) {
//        if(arr[i]>arr[i+1]){
//            return false;
//        }
//    }
//    return true;
//}
    //创建一个新数组并赋值
//public static void createArray(){
//        int[] arr=new int[100];
//    for (int i = 0; i < arr.length; i++) {
//            arr[i]=i+1;
//            System.out.print(arr[i]+" ");
//    }
//
//}
    //顺序查找数组中的特定元素
//    public static int find(int[] arr, int toFind){
//        for (int i = 0; i < arr.length; i++) {
//            if(arr[i]==toFind){
//                return i;
//            }
//
//        }
//        return -1;
//    }

//    public static int[] createArray(){
//        int[] arr=new int[10000];
//    for (int i = 0; i < 10000; i++) {
//            arr[i]=i;
//    }
//    return arr;

//}
    //二分查找法
//    public static int binarySearch(int[] arr,int toFind){
//        int left=0;
//        int right=arr.length-1;
//        while (left<=right){
//            int mid=(left+right)>>2;//>>右移相当于除2
//            if(toFind<arr[mid]){
//                right=mid-1;
//            }else if(toFind>arr[mid]){
//                left=mid+1;
//            }else{
//               return mid;
//            }
//
//        }
//        return -1;
//
//    }

    //递归方法!

    //自己实现数组拷贝，全拷贝
//    public static int[] arrCopy(int [] arr){
//        int []  arr1=new int[arr.length];
//        for (int i = 0; i <arr.length ; i++) {
//            arr1[i]=arr[i];
//        }
//        return arr1;
//    }
//自己实现 数组的局部拷贝
//    public static int[] copyOf(int[] arr,int startIndex, int endIndex){
//        int[] arr1=new int[endIndex-startIndex];
//        for (int i = startIndex; i <endIndex ; i++) {
//            arr1[i-startIndex]=arr[i];
//        }
//        return arr1;
//    }
    //数组转字符串
//    public static String toString(int[] arr){
//        String ret="[";
//        for (int i = 0; i < arr.length; i++) {
//            ret+=arr[i];
//            if(i< arr.length-1){
//                ret+=",";
//
//            }
//        }
//        ret+="]";
//        return ret;
//    }
//    //找数组中的最大元素
//    public static int arrayMaxNum(int[] arr){
//        int max=arr[0];
//        for (int i = 0; i < arr.length; i++) {
//            if(arr[i]>max){
//                max=arr[i];
//            }
//        }
//        return max;
//    }
//数组逆序
//public static void reverse(int[] arr){
//        int left=0;
//        int right=arr.length-1;
//    for (int i = left; i <=right; i++) {
//        while(left<right){
//            //swap
//            int tmp=arr[left];
//            arr[left]=arr[right];
//            arr[right]=tmp;
//            left++;
//            right--;
//        }
//    }
//}
    //将数组中的偶数放到前面，奇数放在后面
//    public static int[] transform(int[] arr) {
//        int left = 0;
//        int right = arr.length - 1;
//        while (left < right) {
//            while (left < right && arr[left] % 2 == 0) {
//                left++;
//            }
//            while (left < right && arr[right] % 2 != 0) {
//                right--;
//            }
//            int tmp = arr[left];
//            arr[left] = arr[right];
//            arr[right] = tmp;
//
//        }
//        return arr;
//    }


// //是否存在连续三个奇数
    //public static boolean threeConsecutiveOdds(int[] arr){
//        if(arr.length<3){
//            return false;
//        }
//    for (int i = 0; i < arr.length-2; i++) {
//        if((arr[i]%2==1) && (arr[i+1]%2==1) && (arr[i+2]%2==1)){
//            return true;
//        }
//    }
//    return false;
//}


    //1.多数元素
//    public  static int  manyNum(int[] arr){
//            for (int i = 0; i < arr.length; i++) {
//                int count=0;
//                for (int j = 0; j <arr.length ; j++) {
//                if (arr[j] == arr[i]) {
//                    count++;
//                }
//                    if(count>arr.length/2){
//                        return arr[i];
//                    }
//            }
//        }
//      return -1;
//    }
    //2.哈希表方法 映射存储出现的元素以及出现元素的次数
//    public static int manyNum(int[] arr){
//        //JDK哈希表的用法
//        HashMap<Integer,Integer> hashMap=new HashMap<>();
//        for (int i = 0; i < arr.length; i++) {
//            //若此时映射中存在元素
//            if(hashMap.containsKey(arr[i])){
//                //此时只需要将出现次数+1
//                int value=hashMap.get(arr[i]);
//                hashMap.put(arr[i],value+1);
//
//            }else{
//
//                //此时映射中还没有元素
//                //哈希表的存储方法put(不重复元素，value）
//                hashMap.put(arr[i],1);
//            }
//        }
//       // 在数据集中查找出现次数>n/2的元素
//      //  哈希表遍历
//
//        Set<Map.Entry<Integer,Integer>> set= hashMap.entrySet();
//        for(Map.Entry<Integer,Integer> entry :set){
//            if(entry.getValue()>arr.length/2){
//                return entry.getKey();
//            }
//        }
//        return -1;
//    }
    //3.先排序再取中间值
//    public static int manyNum(int[] arr){
//        Arrays.sort(arr);
//        return arr[arr.length/2];
//    }


    //1.只出现一次的数
//    public static int onceNum(int[] arr) {
//        for (int i = 0; i < arr.length; i++) {
//            int count = 0;
//            for (int j = 0; j < arr.length; j++) {
//                if (arr[j] == arr[i]) {
//                    count++;
//                }
//
//                }
//            if (count == 1) {
//                return arr[i];
//            }
//
//        }
//        return -1;
//    }

    //2.哈希表方法
//    public static int onceNum(int[] arr){
//        HashMap<Integer,Integer> hashMap=new HashMap<>();
//        for (int i = 0; i < arr.length; i++) {
//            if(hashMap.containsKey(arr[i])){
//                hashMap.put(arr[i],2);
//            }else{
//                hashMap.put(arr[i],1);
//            }
//        }
//        Set<HashMap.Entry<Integer,Integer>> set=hashMap.entrySet();
//        for(HashMap.Entry<Integer,Integer> entry:set){
//            if(entry.getValue()==1){
//                return entry.getKey();
//            }
//        }
//        return -1;
//    }
    //3.异或
//public static int onceNum(int[] arr){
//       int ret = 0;
//       for (int i:arr) {
//                ret = ret ^ i;//
//            }
//            return ret;
//        }
//}


//    //两数之和
//    public static int[] find(int[] nums,int target){
//        for (int i = 0; i < nums.length; i++) {
//            for (int j = i+1; j <nums.length ; j++) {
//            if(nums[j]==target-nums[i]){
//                return new int[]{i,j};
//            }
//            }
//        }
//        throw new IllegalArgumentException("no two sum solution");
//    }


    //若一个数组有且只有一个元素出现一次,其他元素均出现3次,找到该元素
//}
    public static  void swapArray(int[] arr1, int[] arr2){
        int[] ret=new int[arr1.length+ arr2.length];
        if(arr1.length!=arr2.length){
            System.out.println("无法交换数组内容，请重新输入");
        }else {
            for (int i = 0; i < arr1.length; i++) {
                ret[i] = arr1[i];
            }
            for (int i = 0; i < arr2.length; i++) {
                arr1[i] = arr2[i];
            }
            for (int i = 0; i < arr1.length; i++) {
                arr2[i] = ret[i];
            }
            System.out.println("交换后arr1:"+Arrays.toString(arr1));
            System.out.println("交换后arr2:"+Arrays.toString(arr2));
        }
    }
}
